iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
AI/ ML & Data

AI 學習紀錄系列 第 5

Day5: Gemini API 其他用法-2

  • 分享至 

  • xImage
  •  

今天測試看看處理 pdf 的能力。
一樣先設定好 API KEY 跟模型,接著把測試的 pdf 下載下來。

import google.generativeai as genai
genai.configure(api_key='自己的 API key')
model = genai.GenerativeModel('gemini-1.5-flash')
!wget -O gemini.pdf https://storage.googleapis.com/cloud-samples-data/generative-ai/pdf/2403.05530.pdf

接著用 upload_file 把 pdf 上傳到雲端,可以加上 display_name 參數來指定 display_name。

sample_file = genai.upload_file( path="gemini.pdf" , display_name="Gemini 1.5 PDF")

https://ithelp.ithome.com.tw/upload/images/20240821/20168318aHEUWwu2iC.png

他可以讀取多份文件分析,我再多上傳了兩份不同的文件,看看效果。

sample_file_2 = genai.upload_file( path="testPdfA.pdf" , display_name="Test PDF A")
sample_file_3 = genai.upload_file( path="testPdfB.pdf" , display_name="Test PDF B")
response = model.generate_content([sample_file, sample_file_2, sample_file_3, '針對這三份文件,各寫一段簡介'])
print(response.text)

他有正確的讀懂出我上傳的其他兩份文件。
https://ithelp.ithome.com.tw/upload/images/20240821/20168318ia7Butu7Ui.png

現在雲端上有多份檔案,我們把他們列出來看一下狀況。

for file in genai.list_files():
    print(f"{file.name}, {file.display_name}, URI: {file.uri}")

https://ithelp.ithome.com.tw/upload/images/20240821/201683187Q9yMF8VPI.png

他們的 UNIQUE KEY 是 name,可以通過 name 取得、刪除檔案。我來把自己額外上傳的兩份刪掉。

genai.delete_file("files/6**********1")
genai.delete_file("files/g**********z")
for file in genai.list_files():
    print(f"{file.name}, {file.display_name}, URI: {file.uri}")

https://ithelp.ithome.com.tw/upload/images/20240821/20168318lWYuo6YjxK.png

接下來試試看他寫程式的能力。
有兩個方法可以設定,第一個方式是在呼叫 generate_content 的時候設定,加上 tools = 'code_execution' 即可。

model = genai.GenerativeModel(model_name = 'gemini-1.5-pro')
response = model.generate_content("用 python 寫一個只允許數字的正規表達式", tools = 'code_execution')
print(response.text)

https://ithelp.ithome.com.tw/upload/images/20240821/20168318cIAIfXtVBc.png

我小改一下讓他多跑兩個測試,一樣是可以正確運行的。

import re
for  string in ["12345", "A123", "123中文"]:
    match = re.match(r"^\d+$", string)
    if match:
        print("The string contains only digits.")
    else:
        print("The string does not contain only digits.")

https://ithelp.ithome.com.tw/upload/images/20240821/20168318Zsh44nuEC1.png

第二個方式是在選擇 model 時啟用這個功能。

model = genai.GenerativeModel(
    model_name = 'gemini-1.5-pro',
    tools = 'code_execution'
)
response = model.generate_content('寫一個譨把英文字母全轉大寫的 python 程式.')
print(response.text)

https://ithelp.ithome.com.tw/upload/images/20240821/20168318ufxdoFk1xu.png

直接複製來用,是可以運行的。

def to_uppercase(text):
    """將輸入的文字轉換為全部大寫。

    Args:
        text: 要轉換的文字。

    Returns:
        全部大寫的文字。
    """
    return text.upper()
text = "Hello, world!"
uppercase_text = to_uppercase(text)
print(f"原始文字:{text}")
print(f"大寫文字:{uppercase_text}")

https://ithelp.ithome.com.tw/upload/images/20240821/20168318l2hRiNRI5P.png

如果是要在 chat 模式下使用此功能,也是要在讀 model 的時候就設定好。

model = genai.GenerativeModel(
    model_name = 'gemini-1.5-pro',
    tools = 'code_execution'
)
chat = model.start_chat()
response = chat.send_message('用 python 寫一支程式計算出前50個質數的和 ')
print(response.text)

https://ithelp.ithome.com.tw/upload/images/20240821/20168318qhJYpAyGVb.png

複製起來測試,也是可以正確運行。

def is_prime(n):
    """檢查一個數字是否為質數。"""
    if n <= 1:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True
primes = []
num = 2
while len(primes) < 50:
    if is_prime(num):
        primes.append(num)
    num += 1
sum_of_primes = sum(primes)
print(f"前 50 個質數的和是: {sum_of_primes}")

https://ithelp.ithome.com.tw/upload/images/20240821/201683184XtnQhpBBa.png

今天就測到這邊。

參考
https://ai.google.dev/gemini-api/docs/document-processing?hl=zh-tw&authuser=1&lang=python
https://ai.google.dev/api/files?authuser=1&hl=zh-tw
https://ai.google.dev/gemini-api/docs/code-execution?hl=zh-tw&authuser=1&lang=python


上一篇
Day 4: Gemini API 其他用法
下一篇
Day 6: Stable Cascade
系列文
AI 學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言